home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 025a / cdb120.zip / DBMGR.H < prev    next >
Text File  |  1991-05-20  |  14KB  |  304 lines

  1. /*
  2.  *  dbmgr.h
  3.  *
  4.  *  This file contains structures, macros and #defines for
  5.  *  the database layout.
  6.  *
  7.  *  Copyright (C) 1989, 1990, 1991 by Daytris.  All rights reserved.
  8.  */
  9.  
  10. typedef char            CHAR;
  11. typedef unsigned char   UCHAR;
  12. typedef short           INT;
  13. typedef unsigned short  UINT;
  14. typedef long            LONG;
  15. typedef unsigned long   ULONG;
  16.  
  17. INT DbClose( void);
  18. INT DbFlush( void);
  19. INT DbOpen( CHAR *pDbDir, CHAR *pDbName);
  20. INT DbRecordAdd( CHAR *pRecName, void *pData);
  21. INT DbRecordDelete( CHAR *pRecName);
  22. INT DbRecordFindByKey( CHAR *pRecName, CHAR *pFldName, void *pKey);
  23. INT DbRecordFindFirst( CHAR *pRecName, CHAR *pFldName);
  24. INT DbRecordFindLast( CHAR *pRecName, CHAR *pFldName);
  25. INT DbRecordFindNext( CHAR *pRecName, CHAR *pFldName);
  26. INT DbRecordFindPrev( CHAR *pRecName, CHAR *pFldName);
  27. INT DbRecordGetByKey( CHAR *pRecName, CHAR *pFldName, void *pTarget, void *pKey);
  28. INT DbRecordGetCurrency( CHAR *pRecName, void *pTarget);
  29. INT DbRecordGetCurrent( CHAR *pRecName, void *pTarget);
  30. INT DbRecordGetFirst( CHAR *pRecName, CHAR *pFldName, void *pTarget);
  31. INT DbRecordGetLast( CHAR *pRecName, CHAR *pFldName, void *pTarget);
  32. INT DbRecordGetNext( CHAR *pRecName, CHAR *pFldName, void *pTarget);
  33. INT DbRecordGetPrev( CHAR *pRecName, CHAR *pFldName, void *pTarget);
  34. INT DbRecordUpdate( CHAR *pRecName, void *pData);
  35. INT DbRecordUpdCurrency( CHAR *pRecName, void *pData);
  36. INT DbSetAdd( CHAR *pOwnerName, CHAR *pMemberName);
  37. INT DbSetDelete( CHAR *pOwnerName, CHAR *pMemberName);
  38. INT DbSetFindFirst( CHAR *pOwnerName, CHAR *pMemberName);
  39. INT DbSetFindLast( CHAR *pOwnerName, CHAR *pMemberName);
  40. INT DbSetFindNext( CHAR *pOwnerName, CHAR *pMemberName);
  41. INT DbSetFindPrev( CHAR *pOwnerName, CHAR *pMemberName);
  42. INT DbSetGetFirst( CHAR *pOwnerName, CHAR *pMemberName, void *pTarget);
  43. INT DbSetGetLast( CHAR *pOwnerName, CHAR *pMemberName, void *pTarget);
  44. INT DbSetGetNext( CHAR *pOwnerName, CHAR *pMemberName, void *pTarget);
  45. INT DbSetGetOwner( CHAR *pOwnerName, CHAR *pMemberName, void *pTarget);
  46. INT DbSetGetPrev( CHAR *pOwnerName, CHAR *pMemberName, void *pTarget);
  47.  
  48. INT cdb( INT, ...);
  49.  
  50. #define NBRHANDLES      12      /* Maximum number of file handles       */
  51. #define MAXKEY          8       /* Maximum # of keys per key record     */
  52. #define KEYPAGESIZE     512     /* Key page buffer size                 */
  53. #define NBRPAGES        16      /* Number of key page buffers           */
  54. #define DATAPAGESIZE    2048    /* Data page buffer size                */
  55. #define DATASLOTSIZE    1024    /* Data file slot buffer size           */
  56.  
  57. /* Testdrive version defines */
  58. #define TESTDRIVE_MAX_RECORDS   50L
  59.  
  60. /* Field index structure defines */
  61. #define KEY_FIELD       0x01
  62. #define SET_KEY_FIELD   0x01
  63.  
  64. /* Handle index structure defines */
  65. #define FILE_MODIFIED   0x01
  66.  
  67. /* Key file index structure defines */
  68. #define PAGE_FULL       0x01
  69.  
  70. /* Page index structure defines */
  71. #define PAGE_DIRTY      0x01
  72.  
  73. /* Error defines */
  74. #define E_TESTDRIVE     -3
  75. #define E_INVALIDCASE   -2
  76. #define E_DOS           -1
  77. #define E_NORECNAME     1
  78. #define E_NOFLDNAME     2
  79. #define E_INVALIDSET    3
  80. #define E_NOTAKEY       4
  81. #define E_NOTFOUND      5
  82. #define E_NEXTGUESS     6
  83. #define E_NOCURRENT     7
  84. #define E_NONEXT        8
  85. #define E_NOPREV        9
  86. #define E_NOMEMBER      10
  87. #define E_NOOWNER       11
  88.  
  89. /* DBC call defines */
  90. #define D_OPEN                  0
  91. #define D_CLOSE                 1
  92. #define D_FLUSH                 2
  93. #define D_GET_CURRENCY          3
  94. #define D_UPDATE_CURRENCY       4
  95. #define D_FIND_FIRST_RECORD     5
  96. #define D_FIND_LAST_RECORD      6
  97. #define D_FIND_NEXT_RECORD      7
  98. #define D_FIND_PREV_RECORD      8
  99. #define D_FIND_RECORD_BY_KEY    9
  100. #define D_GET_FIRST_RECORD      10
  101. #define D_GET_LAST_RECORD       11
  102. #define D_GET_NEXT_RECORD       12
  103. #define D_GET_PREV_RECORD       13
  104. #define D_GET_RECORD_BY_KEY     14
  105. #define D_GET_CURRENT_RECORD    15
  106. #define D_ADD_RECORD            16
  107. #define D_UPDATE_RECORD         17
  108. #define D_DELETE_RECORD         18
  109. #define D_FIND_FIRST_SET        19
  110. #define D_FIND_LAST_SET         20
  111. #define D_FIND_NEXT_SET         21
  112. #define D_FIND_PREV_SET         22
  113. #define D_GET_FIRST_SET         23
  114. #define D_GET_LAST_SET          24
  115. #define D_GET_NEXT_SET          25
  116. #define D_GET_PREV_SET          26
  117. #define D_GET_SET_OWNER         27
  118. #define D_ADD_SET               28
  119. #define D_DELETE_SET            29
  120.  
  121. #if 0
  122. /* DataBase Macros */
  123. #define DbOpen(a)                       cdb(D_OPEN, a)
  124. #define DbClose()                       cdb(D_CLOSE)
  125. #define DbFlush()                       cdb(D_FLUSH)
  126. #define DbRecordGetCurrency(a,b)        cdb(D_GET_CURRENCY,a,b)
  127. #define DbRecordUpdCurrency(a,b)        cdb(D_UPDATE_CURRENCY,a,b)
  128. #define DbRecordFindFirst(a,b)          cdb(D_FIND_FIRST_RECORD,a,b)
  129. #define DbRecordFindLast(a,b)           cdb(D_FIND_LAST_RECORD,a,b)
  130. #define DbRecordFindNext(a,b)           cdb(D_FIND_NEXT_RECORD,a,b)
  131. #define DbRecordFindPrev(a,b)           cdb(D_FIND_PREV_RECORD,a,b)
  132. #define DbRecordFindByKey(a,b,c)        cdb(D_FIND_RECORD_BY_KEY,a,b,c)
  133. #define DbRecordGetFirst(a,b,c)         cdb(D_GET_FIRST_RECORD,a,b,c)
  134. #define DbRecordGetLast(a,b,c)          cdb(D_GET_LAST_RECORD,a,b,c)
  135. #define DbRecordGetNext(a,b,c)          cdb(D_GET_NEXT_RECORD,a,b,c)
  136. #define DbRecordGetPrev(a,b,c)          cdb(D_GET_PREV_RECORD,a,b,c)
  137. #define DbRecordGetByKey(a,b,c,d)       cdb(D_GET_RECORD_BY_KEY,a,b,c,d)
  138. #define DbRecordGetCurrent(a,b,c)       cdb(D_GET_CURRENT_RECORD,a,b,c)
  139. #define DbRecordAdd(a,b)                cdb(D_ADD_RECORD,a,b)
  140. #define DbRecordUpdate(a,b)             cdb(D_UPDATE_RECORD,a,b)
  141. #define DbRecordDelete(a)               cdb(D_DELETE_RECORD,a)
  142. #define DbSetFindFirst(a,b)             cdb(D_FIND_FIRST_SET,a,b)
  143. #define DbSetFindLast(a,b)              cdb(D_FIND_LAST_SET,a,b)
  144. #define DbSetFindNext(a,b)              cdb(D_FIND_NEXT_SET,a,b)
  145. #define DbSetFindPrev(a,b)              cdb(D_FIND_PREV_SET,a,b)
  146. #define DbSetGetFirst(a,b,c)            cdb(D_GET_FIRST_SET,a,b,c)
  147. #define DbSetGetLast(a,b,c)             cdb(D_GET_LAST_SET,a,b,c)
  148. #define DbSetGetNext(a,b,c)             cdb(D_GET_NEXT_SET,a,b,c)
  149. #define DbSetGetPrev(a,b,c)             cdb(D_GET_PREV_SET,a,b,c)
  150. #define DbSetGetOwner(a,b,c)            cdb(D_GET_SET_OWNER,a,b,c)
  151. #define DbSetAdd(a,b)                   cdb(D_ADD_SET,a,b)
  152. #define DbSetDelete(a,b)                cdb(D_DELETE_SET,a,b)
  153. #endif
  154.  
  155.  
  156. /* DataBase structures and unions */
  157. union  type
  158.     {
  159.     CHAR                charval;
  160.     INT                 intval;
  161.     LONG                longval;
  162.     float               floatval;
  163.     double              doubleval;
  164.     CHAR                *ptrval;
  165.     UCHAR               ucharval;
  166.     UINT                uintval;
  167.     ULONG               ulongval;
  168.     };
  169.  
  170. struct dbheader                         /* 128 bytes                    */
  171.     {               
  172.     CHAR                title[96];      /* DBD title                    */
  173.     UINT                totrecs;        /* Total number of records      */
  174.     UINT                totowns;        /* Total number of owners       */
  175.     UINT                totmems;        /* Total number of members      */
  176.     UINT                totflds;        /* Total number of fields       */
  177.     CHAR                prefix[6];      /* File prefix description      */
  178.     CHAR                filler[18];
  179.     };
  180.  
  181. struct record_index                     /* 46 bytes                     */
  182.     {
  183.     UINT                firstown;       /* First owner                  */
  184.     UINT                nbrowns;        /* Number of owners             */
  185.     UINT                firstmem;       /* First member                 */
  186.     UINT                nbrmems;        /* Number of members            */
  187.     UINT                firstfld;       /* First field                  */
  188.     UINT                nbrflds;        /* Number of fields             */
  189.     UINT                reclen;         /* Record length                */
  190.     CHAR                recname[32];    /* Record name                  */
  191.     };
  192.  
  193. struct owner_index                      /* 4 bytes                      */
  194.     {
  195.     UINT                nextown;        /* Next owner                   */
  196.     UINT                ownnum;         /* Owner record number          */
  197.     };
  198.  
  199. struct member_index                     /* 8 bytes                      */
  200.     {
  201.     UINT                nextmem;        /* Next member                  */
  202.     UINT                memnum;         /* Member record number         */
  203.     UINT                memkeyfld;      /* Key field number for set     */
  204.     UINT                memflags;       /* Bit 0 - key field present    */
  205.     };
  206.  
  207. struct field_index                      /* 40 bytes                     */
  208.     {
  209.     UCHAR               fldtype;        /* Field type  Bit 0 - char     */
  210.                                         /*             Bit 1 - int      */
  211.                                         /*             Bit 2 - short    */
  212.                                         /*             Bit 3 - long     */
  213.                                         /*             Bit 4 - float    */
  214.                                         /*             Bit 5 - double   */
  215.                                         /*             Bit 7 - unsigned */
  216.     UINT                fldlen;         /* Field length                 */
  217.     UINT                flddim;         /* Field dimension              */
  218.     CHAR                fldname[32];    /* Field name                   */
  219.     UINT                fldkey;         /* Key number of data struct    */
  220.     UCHAR               fldflags;       /* Bit 0 - key field            */
  221.     };
  222.  
  223. /* Field casting defines */
  224. #define FLDTYPE_CHAR            0x01
  225. #define FLDTYPE_INT             0x02
  226. #define FLDTYPE_SHORT           0x04
  227. #define FLDTYPE_LONG            0x08
  228. #define FLDTYPE_FLOAT           0x10
  229. #define FLDTYPE_DOUBLE          0x20
  230. #define FLDTYPE_UNSIGNED        0x80
  231.  
  232. struct  key_file_index                  /* 32 bytes                     */
  233.     {
  234.     CHAR        name[12];               /* Key file name                */
  235.     UINT        nextavailpage;          /* Next available page          */
  236.     UINT        firstdelpage;           /* First page in the delete     */
  237.                                         /* chain.                       */
  238.     UINT        pagenbr[MAXKEY];        /* Key 1st page index           */
  239.     };
  240.  
  241. struct  key_page_index                  /* 10 bytes                     */
  242.     {
  243.     UINT        prevpage;               /* Previous page in sort tree   */
  244.     UINT        nextpage;               /* Next page in sort tree       */
  245.     UINT        slotsused;              /* Number of slots used on page */
  246.     UINT        slotsize;               /* Size of key slot             */
  247.     UINT        flags;                  /* Bit 0 - page is full         */
  248.     };
  249.  
  250. struct  data_file_index                 /* 32 bytes                     */
  251.     {
  252.     CHAR        name[12];               /* Data file name               */
  253.     ULONG       nextavailslot;          /* Next available slot          */
  254.     ULONG       firstdelslot;           /* First slot in the delete     */
  255.                                         /* chain.                       */
  256.     UINT        slotsize;               /* Size of data slot            */
  257.     CHAR        filler[10];
  258.     };
  259.  
  260. struct  data_slot_index                 /* 6 bytes                      */
  261.     {
  262.     UINT        offsettodata;           /* Offset to actual data        */
  263.     ULONG       nextdel;                /* DBA of next member in the    */
  264.                                         /* delete chain.                */
  265.     };
  266.  
  267. struct  ownptr_index                    /* 8 bytes                      */
  268.     {
  269.     ULONG       firstmem;               /* Dba of first member          */
  270.     ULONG       lastmem;                /* Dba of last member           */
  271.     };
  272.  
  273. struct  memptr_index                    /* 12 bytes                     */
  274.     {
  275.     ULONG       owndba;                 /* Dba of owner record          */
  276.     ULONG       prevmem;                /* Dba of prev member in chain  */
  277.     ULONG       nextmem;                /* Dba of next member in chain  */
  278.     };
  279.  
  280. struct handle_index                     /* 4 bytes                      */
  281.     {
  282.     INT         handle;                 /* Handle number                */
  283.     UINT        flags;                  /* Bit 0 - set if modified      */
  284.     };
  285.  
  286. struct page_index                       /* 520 bytes                    */
  287.     {
  288.     UINT        recnbr;                 /* Record number                */
  289.     UINT        fldnbr;                 /* Field number                 */
  290.     UINT        diskpagenbr;            /* Page number                  */
  291.     CHAR        buffer[KEYPAGESIZE];    /* Data buffer                  */
  292.     UINT        flags;                  /* Bit 0 - set if page is dirty */
  293.     };
  294.  
  295. struct currency_index                   /* 36 bytes                     */
  296.     {
  297.     struct 
  298.         {
  299.         UINT    page;
  300.         UINT    slot;
  301.         } keydba[MAXKEY];               /* Array of key dba's           */
  302.     ULONG       datadba;                /* Data database address        */
  303.     };
  304.